
/**
 * 常量声明
 */

#ifndef _ORANGES_CONST_H_
#define _ORANGES_CONST_H_

#define EXTERN extern

// 函数类型
#define PUBLIC
#define PRIVATE static

/* Boolean */
#define	TRUE	1
#define	FALSE	0

// GDT 和 IDT 中描述符的个数
#define GDT_SIZE 128
#define IDT_SIZE 256

/* 权限 */
#define	PRIVILEGE_KRNL	0
#define	PRIVILEGE_TASK	1
#define	PRIVILEGE_USER	3

/* RPL */
#define	RPL_KRNL	SA_RPL0
#define	RPL_TASK	SA_RPL1
#define	RPL_USER	SA_RPL3

// 8259A 中断控制器端口
#define INT_M_CTL     0x20 // 主片端口 20H
#define INT_M_CTLMASK 0x21 // 主片端口 21H 
#define INT_S_CTL     0xA0 // 从片端口 A0H
#define INT_S_CTLMASK 0xA1 // 从片端口 A1H

// 硬件中断
#define	NR_IRQ		    16	// IRQ 数量
#define	CLOCK_IRQ	    0
#define	KEYBOARD_IRQ	1
#define	CASCADE_IRQ	    2	// 
#define	ETHER_IRQ	    3	// 默认以太网中断向量
#define	SECONDARY_IRQ	3	// 端口 2 的 RS232 中断向量
#define	RS232_IRQ	    4	// 端口 1 的 RS232 中断向量
#define	XT_WINI_IRQ	    5	/* xt winchester */
#define	FLOPPY_IRQ	    6	// 软盘
#define	PRINTER_IRQ	    7
#define	AT_WINI_IRQ	    14	/* at winchester */

/* 8253/8254 PIT (可编程时钟定时器) */
#define TIMER0         0x40 // 定时器通道 0 的 I/O 端口
#define TIMER_MODE     0x43 // 定时器模式控制的 I/O 端口
#define RATE_GENERATOR 0x34 /* 00-11-010-0 :
                             * Counter0 - LSB then MSB - rate generator - binary
                             */
#define TIMER_FREQ     1193182L // PC 和 AT 定时器的时钟频率
#define HZ             100  // 时钟频率（IBM-PC 上可软件设置）

/* system call */
#define NR_SYS_CALL     1 // 系统调用的函数个数

#endif

